【AWS Configコスト削減】Security Hubの新規コントロール追加により、 AWS Configの利用料金が爆増したので原因を調査してみた
AWS Configの料金高くないか?
こんにちは!AWS事業本部のおつまみです。
みなさん、AWS Configの料金高いな、、どのリソースが原因か知りたいなと思ったことはありますか?私はあります。
先日あるアカウントでコスト削減できる箇所を調査していたところ、AWS Configの料金が異様に高いことに気づきました
AWS Config では、記録された設定項目(configuration item recorded)ごとに0.003 USD
かかります。(料金 - AWS Config | AWS、2024年2月時点の東京リージョンで「連続記録」の場合)
そのため、リソースの新規作成や設定変更、削除が頻繁に行われる環境では意図せず料金が膨らむ場合もあります。
記録された設定項目数はCloudWatchメトリクスで確認できます。詳細はこちらのブログをご確認ください。
その際、AWS::Backup::RecoveryPoint
とAWS::Config::ResourceCompliance
の項目数が異様に多いことが判明しました。
これらの項目数が増加した原因について調査したので、その結果を共有したいと思います!
いきなり結論
- 2023年12月にSecurity Hubのコントロール追加アップデートでAWS Backupに関するコントールが追加された。
- これまで作成されていたAWS BackupのRecovery Pointが全てチェック対象となった。
- 以降もAWS BackupのRecovery Pointが作成され続ける環境であったため、AWS Configでの記録とルール評価による利用が発生し続けた。
前提:Security Hubチェックの仕組みと料金
まず前提として、Security Hubチェックの仕組みと料金について説明します。
Security Hubは自身でリソースのチェックをしているわけではなく、AWS Config ルールによるコンプライアンス違反のチェックをしています。
Security Hub自身がチェックをしているわけではないということですね。
公式ドキュメントに記載されている通り、Security Hub を有効化することで、AWS Config Rules が実行されるようになります。
AWS Security Hub は、サービスリンクされた AWS Config ルールを使用して、コントロールのセキュリティチェックの大部分を実行します。
そのため、利用料金に関してはこちらのように各サービスでこれらの費用がかかります。
料金の詳細については、公式から出ている情報をご確認ください。
AWS Config の料金
AWS Security Hub の料金
利用料増加の原因
2023年12月にSecurity Hub側のアップデートでAWS Backupのリカバリポイントに関するコントールが追加されたことが原因でした。
追加されたコントロールはこちらです。
[Backup.1] AWS Backup のリカバリポイントは保存時に暗号化する必要がある
以下の流れで利用料が増加したことが考えられます。
- Security Hub で AWS Backupのリカバリポイントに関するコントロールが有効化された
- 今まで作成されていたリカバリポイントがチェック対象となった
- AWS Configによるルール評価の
AWS::Config::ResourceCompliance
が増加した
詳細について解説します。
AWS BackupのRecoveryPointについて
そもそもこちらのアカウントでは、AWS Backupが以下のように設定されていました。
- バックアップ対象:EC2・EBS・RDSなどのリソース全50個程度
- バックアップ頻度:毎時
- 保持期間:7日間
そのため、リカバリポイントが50*24*7=8400
で常時8400個程度作成されている状態でした。
よってこれらのリソースを記録する料金については、Security Hub側のコントロール追加前からそれなりにかかっていたようです。
なおAWS BackupのAWS Config記録は2021/11時点で行われるようになっています。
AWS ConfigのResourceComplianceについて
この項目は先ほど説明したようにAWS Configでリソースのコンプライアンス違反のチェックで記録される項目です。
Security Hubによるコントロールチェックが行われるようになると、この項目数が増加します。
特に、リソースの作成・削除を頻繁に繰り返すような環境の場合、その分AWS::config::ResourceCompliance
も頻繁に記録され、Config の料金増加要因となります。
公式ドキュメントにも下記のように記載されています。
Security Hub では、
AWS::Config::ResourceCompliance
設定項目を更新すると AWS Config 設定レコーダーのコストに影響する可能性があります。AWS Config ルールに関連付けられた Security Hub コントロールがコンプライアンス状態を変更したり、有効化/無効化されたり、パラメータを更新するたびに記録の更新が発生します。AWS Config 設定レコーダーを Security Hub のみに使用し、この設定項目を他の目的には使用しない場合は、AWS Config コンソールまたは AWS CLI で記録をオフにすることをお勧めします。これにより、AWS Config コストを削減できます。Security Hub でセキュリティチェックを行うためにAWS::Config::ResourceCompliance
を記録する必要はありません。
AWS Configによる記録項目数をコントロール追加前後で比較
今回はコントロールが追加された前後でConfigurationItemsRecorded
のCloudWatchメトリクスを比較してみます。
このように2023/12/11 00:00:00 ~ 23:59:59の間はAWS::Backup::RecoveryPoint
が大部分を占めており、2399個記録されていました。
毎日2399個のリカバリポイントが作成されていたということですね。
一方、2023/12/12 00:00:00 ~ 23:59:59の間はAWS::Config::ResourceCompliance
が大部分を占めており、10069個、AWS::Backup::RecoveryPoint
が2350個記録されていました。
なお元々RecoveryPointが常時8000個程度作成されている状態だったため、この期間にSecurity Hub で AWS::Backupのコントロールが追加され、今までのリソースに対してチェック処理が行われたことがわかります。
ちなみに2023/12/13以降は、どちらもほぼ同じ数が記録されていることがわかります。
対応方法
AWS Configで記録対象外にする
AWS Config では「記録から除外」する設定を行うことができるようになってます。
これにより、不要なリソースを記録対象外にし、コストを削減することができます。
よって、AWS::Backup::RecoveryPoint
で記録される項目数を全て削減することができます。
なお、除外するとリソースに関する変更履歴が今後記録されないことになります。
今回はAWS Backupであったため、除外対象にしても問題ないと判断しましたが、EC2やRDSといったよく利用するサービスを除外対象とする場合はコストとのバランスを考えてから除外の判断をしましょう。
また除外対象にしたことで、AWS Backupに関するSecurity Hubのコントロールも実行されないようになります。
つまり、必然的にAWS::Config::ResourceCompliance
で記録される項目数も全て削減することができます。
Security Hubのコントロールを無効化する
念の為、Security Hub側のコントロールも無効化しておきます。
すべての標準におけるコントロールの有効化と無効化 - AWS Security Hub
これにより不意にAWS::Backup::RecoveryPoint
が誤って記録対象になった場合でも、チェック対象外となるためConfigルールによる評価費用がかからないようになります。
対応結果
当初$20/日程度かかっていた費用を$2/日程度に削減することができました!
おまけ:Security Hubの料金は爆増しなかった?
Security Hubの料金は爆増してないかと心配になったのですが、前日と比べて$5程度の増加でした。
Security Hubの料金はチェック数が増えるごと1チェックあたりの料金が安くなるので、そこまでコストに跳ねなかったようです。
さいごに
今回は、Security Hubの新規コントロール追加により、 AWS Configの利用料金が爆増したので原因を調査した結果をご紹介しました。
Security Hubの有効化でコストが増加することは把握していましたが、新規コントロール追加により AWS Configの利用料金が増加することは把握できていませんでした。
今後頻繁に作成されるリソースに関しては、事前に「記録から除外」するようにしたいと思います。
最後までお読みいただきありがとうございました!
どなたかのお役に立てれば幸いです。
以上、おつまみ(@AWS11077)でした!